home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / graphics / gnuplot / term / gnugraph.trm < prev    next >
Text File  |  1993-09-15  |  5KB  |  214 lines

  1. /* GNUPLOT -- gnugraph.trm */
  2. /*
  3.  * Copyright (C) 1993
  4.  *
  5.  * Permission to use, copy, and distribute this software and its
  6.  * documentation for any purpose with or without fee is hereby granted, 
  7.  * provided that the above copyright notice appear in all copies and 
  8.  * that both that copyright notice and this permission notice appear 
  9.  * in supporting documentation.
  10.  *
  11.  * Permission to modify the software is granted, but not the right to
  12.  * distribute the modified code.  Modifications are to be distributed 
  13.  * as patches to released version.
  14.  *  
  15.  * This software  is provided "as is" without express or implied warranty.
  16.  * 
  17.  * This file is included by ../term.c.
  18.  *
  19.  * This terminal driver supports:
  20.  *  GNU plot(5) graphics language
  21.  *
  22.  * AUTHORS
  23.  *  Tony Richardson from the unixplot.trm by Colin Kelley, Thomas Williams,
  24.  *  and Russell Lang and from post.trm by Russell Lang.
  25.  * 
  26.  * send your comments or suggestions to (info-gnuplot@ames.arc.nasa.gov).
  27.  * 
  28.  * This version of the 'unixplot' driver produces device independent
  29.  * output.  I've chosen parameter values so that the PostScript output
  30.  * produced by plot2ps is 5" x 3".  You can use the 'set size' command
  31.  * to get output up to 8.25" x 8.25", i.e. size values larger than
  32.  * 1 are okay.
  33.  */
  34.  
  35. /*
  36. Unixplot library writes to stdout.  A fix was put in place by
  37. ..!arizona!naucse!jdc to let set term and set output redirect
  38. stdout.  All other terminals write to outfile.
  39. */
  40.  
  41. /* This is a device independent format, so the output should look
  42.  * look "reasonable" on any output device.  I set things up there so
  43.  * that the output of plot2ps is 5" x 3" (standard GNUPLOT size).
  44.  * You can use GNUPLOT's size command to obtain plots to almost the
  45.  * 8.25" x 8.25" limit.
  46.  */
  47.  
  48. char up_font[MAX_ID_LEN+1] = "Courier" ; /* name of font */
  49. int up_fontsize = 10;
  50.  
  51. /* plot2ps produces a 8.25" x 8.25" square. */
  52. #define UP_SCREENX 32768
  53. #define UP_SCREENY 32768
  54. #define UP_SCRXINC 8.25
  55. #define UP_SCRYINC 8.25
  56.  
  57. /* We want a 5" x 3" graph by default. */
  58. #define UP_XINCHES 5
  59. #define UP_YINCHES 3
  60. /* UP_XMAX = (UP_SCREENX*UP_XINCHES)/UP_SCRXINC
  61.    UP_YMAX (UP_SCREENY*UP_YINCHES)/UP_SCRYINC */
  62. #define UP_XMAX 19859
  63. #define UP_YMAX 11565
  64.  
  65. #define UP_XLAST (UP_XMAX - 1)
  66. #define UP_YLAST (UP_YMAX - 1)
  67.  
  68. /* UP_VCHAR = ((UP_FONTSIZE*UP_YMAX)/(UP_YINCHES*72)) 
  69.             = UP_FONTSIZE*UP_VFONTSC
  70.    UP_HCHAR = ((UP_FONTSIZE/2)*UP_XMAX)/(UP_XINCHES*72))
  71.             = UP_FONTSIZE*UP_HFONTSC
  72. */
  73.  
  74. #define UP_VFONTSC  53.5
  75. #define UP_VCHAR    535   /* 10 * VFONTSC */
  76. #define UP_HFONTSC  27.6
  77. #define UP_HCHAR    276   /* 10 * HFONTSC */
  78.  
  79. #define UP_VTIC (UP_YMAX/80)
  80. #define UP_HTIC (UP_XMAX/80)
  81.  
  82. /* These offsets center plot2ps output in the middle of the page.  The
  83.  * amount of resizing that can be done is limited. */
  84. /*
  85.  * #define UP_XOFF 6454
  86.  * #define UP_YOFF 10601
  87.  */
  88.  
  89. /* These offsets give a 1" offset from the lower left corner.  This
  90.  * gives a greater range of permissible values in GNUPLOT's size
  91.  * command. */
  92. #define UP_XOFF 3972
  93. #define UP_YOFF 3972
  94.  
  95. enum JUSTIFY up_justify=LEFT;
  96.  
  97. UP_options()
  98. {
  99.         extern struct value *const_express();
  100.         extern double real();
  101.  
  102.     if(!END_OF_COMMAND) {
  103.       if(almost_equals(c_token,"d$efault")) {
  104.         strcpy(up_font,"Courier");
  105.         up_fontsize = 10;
  106.         term_tbl[term].v_char = (unsigned int)(up_fontsize*UP_VFONTSC);
  107.         term_tbl[term].h_char = (unsigned int)(up_fontsize*UP_HFONTSC);
  108.         c_token++;
  109.       }
  110.     }
  111.  
  112.         if (!END_OF_COMMAND && isstring(c_token)) {
  113.                 quote_str(up_font,c_token);
  114.                 c_token++;
  115.         }
  116.  
  117.         if (!END_OF_COMMAND) {
  118.                 /* We have font size specified */
  119.                 struct value a;
  120.                 up_fontsize = (int)real(const_express(&a));
  121.                 term_tbl[term].v_char = (unsigned int)(up_fontsize*UP_VFONTSC);
  122.                 term_tbl[term].h_char = (unsigned int)(up_fontsize*UP_HFONTSC);
  123.         }
  124.  
  125.     sprintf(term_options,"\"%s\" %d",up_font,up_fontsize);
  126. }
  127.  
  128. UP_init()
  129. {
  130.     openpl();
  131.     space(0,0,UP_SCREENX-1,UP_SCREENY-1);
  132.     fontname(up_font);
  133.     fontsize(up_fontsize);
  134. }
  135.  
  136.  
  137. UP_graphics()
  138. {
  139.     erase();
  140. }
  141.  
  142.  
  143. UP_text()
  144. {
  145.     /* Flush here so that output will be complete. */
  146.     fflush(stdout);
  147. }
  148.  
  149.  
  150. UP_linetype(linetype)
  151. int linetype;
  152. {
  153. static char *lt[2+5] = {"solid", "longdashed", "solid", "dotted","shortdashed",
  154.     "dotdashed", "longdashed"};
  155.  
  156.     if (linetype >= 5)
  157.         linetype %= 5;
  158.     linemod(lt[linetype+2]);
  159. }
  160.  
  161.  
  162. UP_move(x,y)
  163. unsigned int x,y;
  164. {
  165.     move(x+UP_XOFF,y+UP_YOFF);
  166. }
  167.  
  168.  
  169. UP_vector(x,y)
  170. unsigned int x,y;
  171. {
  172.     cont(x+UP_XOFF,y+UP_YOFF);
  173. }
  174.  
  175.  
  176. UP_put_text(x,y,str)
  177. unsigned int x,y;
  178. char str[];
  179. {
  180.     UP_move(x,y); /* Don't adjust x and y! It's done in UP_move. */
  181.     switch(up_justify) {
  182.      case LEFT:
  183.       alabel('l','c',str);
  184.       break;
  185.      case CENTRE:
  186.       alabel('c','c',str);
  187.       break;
  188.      case RIGHT:
  189.       alabel('r','c',str);
  190.       break;
  191.     }
  192.  
  193. }
  194.  
  195. UP_text_angle(ang)
  196. int ang;
  197. {
  198.     rotate(0,0,90*ang);
  199.     return TRUE;
  200. }
  201.  
  202. UP_justify_text(mode)
  203. enum JUSTIFY mode;
  204. {
  205.     up_justify=mode;
  206.     return TRUE;
  207. }
  208.  
  209. UP_reset()
  210. {
  211.     closepl();
  212. }
  213.  
  214.